using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>templates</code>.
    /// </summary>
    public interface ITemplateDAO : IGenericDAO<Template, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie listy obiektów na podstawie języka.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <returns>Lista rekordów o zadanym języku lub null, gdy nie ma</returns>
        IQueryable<Template> FindByLang(int languageId);

        /// <summary>
        /// Wstawianie listy obiektów na podstawie jezyka.
        /// </summary>
        /// <param name="defaultLanguageId">domyslny jezyk</param>
        /// <param name="newLanguageId">nowy jezyk</param>
        /// <returns>true jesli sie udalo, false wpp</returns>
        bool InsertForNewLanguage(int defaultLanguageId, int newLanguageId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie języka i typu strony.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <param name="pageTypeId">typ strony</param>
        /// <returns>lista rekordow o zadanym języku i typie strony</returns>
        IQueryable<Template> FindByLangAndPageType(int languageId, int pageTypeId);


        /// <summary>
        /// Pobieranie listy obiektów na podstawie języka i ścieżki dostępu.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <param name="templatePath">ścieżka</param>
        /// <returns>Lista rekordów o zadanym języku i ścieżce</returns>
        IQueryable<Template> FindByLangAndPageType(int languageId, String templatePath);

        /// <summary>
        /// Pobieranie obiektu na podstawie języka i nazwy.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <param name="templateName">nazwa</param>
        /// <returns>Rekord o zadanym języku i nazwie</returns>
        Template FindByLangAndName(int languageId, string templateName);

        /// <summary>
        /// Usuwanie obiektow po jezyku.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>true dla sukcesu, false w przeciwnym razie</returns>
        bool DeleteByLanguage(int languageId);
    }
}

